main: Code cleanup by passing OstreeRepo * directly to builtins
authorColin Walters <walters@verbum.org>
Sun, 25 Aug 2013 19:11:05 +0000 (15:11 -0400)
committerColin Walters <walters@verbum.org>
Sun, 25 Aug 2013 19:28:23 +0000 (15:28 -0400)
It turns out every builtin (with one special exception) that takes a
repo argument did the same thing; let's just centralize it.  The
special exception was "ostree init --repo=foo" where foo is expected
to *not* actually be a repo.  In that case, simply skip the
ostree_repo_check() invocation.

https://bugzilla.gnome.org/show_bug.cgi?id=706762

27 files changed:
src/libostree/ostree-repo.c
src/libostree/ostree-repo.h
src/ostree/main.c
src/ostree/ot-builtin-admin.c
src/ostree/ot-builtin-cat.c
src/ostree/ot-builtin-checkout.c
src/ostree/ot-builtin-checksum.c
src/ostree/ot-builtin-commit.c
src/ostree/ot-builtin-config.c
src/ostree/ot-builtin-diff.c
src/ostree/ot-builtin-fsck.c
src/ostree/ot-builtin-init.c
src/ostree/ot-builtin-log.c
src/ostree/ot-builtin-ls.c
src/ostree/ot-builtin-prune.c
src/ostree/ot-builtin-pull-local.c
src/ostree/ot-builtin-pull.c
src/ostree/ot-builtin-refs.c
src/ostree/ot-builtin-remote.c
src/ostree/ot-builtin-reset.c
src/ostree/ot-builtin-rev-parse.c
src/ostree/ot-builtin-show.c
src/ostree/ot-builtin-trivial-httpd.c
src/ostree/ot-builtin-write-refs.c
src/ostree/ot-builtins.h
src/ostree/ot-main.c
src/ostree/ot-main.h

index d88a388fa9d323c5a3256f064ccd85714c0b8bac..51c833dfcfa1cebbbc9cc880ab507fccaca83748 100644 (file)
@@ -207,11 +207,44 @@ ostree_repo_init (OstreeRepo *self)
   g_mutex_init (&self->txn_stats_lock);
 }
 
+/**
+ * ostree_repo_new:
+ * @path: Path to a repository
+ *
+ * Returns: (transfer full): An accessor object for an OSTree repository located at @path
+ */
 OstreeRepo*
 ostree_repo_new (GFile *path)
 {
   return g_object_new (OSTREE_TYPE_REPO, "path", path, NULL);
 }
+
+/**
+ * ostree_repo_new_default:
+ *
+ * If the current working directory appears to be an OSTree
+ * repository, create a new #OstreeRepo object for accessing it.
+ * Otherwise, use the default system repository located at
+ * /ostree/repo.
+ *
+ * Returns: (transfer full): An accessor object for an OSTree repository located at /ostree/repo
+ */
+OstreeRepo*
+ostree_repo_new_default (void)
+{
+  if (g_file_test ("objects", G_FILE_TEST_IS_DIR)
+      && g_file_test ("config", G_FILE_TEST_IS_REGULAR))
+    {
+      gs_unref_object GFile *cwd = g_file_new_for_path (".");
+      return ostree_repo_new (cwd);
+    }
+  else
+    {
+      gs_unref_object GFile *default_repo_path = g_file_new_for_path ("/ostree/repo");
+      return ostree_repo_new (default_repo_path);
+    }
+}
+
 /**
  * ostree_repo_get_config:
  * @self:
@@ -326,7 +359,7 @@ ostree_repo_check (OstreeRepo *self, GError **error)
 
   if (!g_file_test (gs_file_get_path_cached (self->objects_dir), G_FILE_TEST_IS_DIR))
     {
-      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
                    "Couldn't find objects directory '%s'",
                    gs_file_get_path_cached (self->objects_dir));
       goto out;
index 9562f30b0103fc55110e7f87f1b6e3379a8102ec..73637c1ea995c3ab130664860b1fef998caa4462 100644 (file)
@@ -37,6 +37,8 @@ GType ostree_repo_get_type (void);
 
 OstreeRepo* ostree_repo_new (GFile *path);
 
+OstreeRepo* ostree_repo_new_default (void);
+
 gboolean      ostree_repo_check (OstreeRepo  *self, GError **error);
 
 GFile *       ostree_repo_get_path (OstreeRepo  *self);
index ae0e3ce46d0e90d135e955c1b4e6ca0d691e9aa7..b7d402406cd04b7b4112001abc7875274db01459 100644 (file)
@@ -39,7 +39,7 @@ static OstreeCommand commands[] = {
   { "checksum", ostree_builtin_checksum, OSTREE_BUILTIN_FLAG_NO_REPO },
   { "diff", ostree_builtin_diff, 0 },
   { "fsck", ostree_builtin_fsck, 0 },
-  { "init", ostree_builtin_init, 0 },
+  { "init", ostree_builtin_init, OSTREE_BUILTIN_FLAG_NO_CHECK },
   { "log", ostree_builtin_log, 0 },
   { "ls", ostree_builtin_ls, 0 },
   { "refs", ostree_builtin_refs, 0 },
index 16d633e4d57b2b1389241e30fdfdb74aafaa07a9..e6ea3e9d0e0acf03a2f2e822ed8cefea9d98fa0f 100644 (file)
@@ -50,7 +50,7 @@ static OstreeAdminCommand admin_subcommands[] = {
 };
 
 gboolean
-ostree_builtin_admin (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_admin (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   gboolean ret = FALSE;
   const char *opt_sysroot = "/";
index eac3a286507d03eb0a198b5fefd14efef54064e3..b95ea271a819aa6ba5ac1d6713db0b791f6cb983 100644 (file)
@@ -55,13 +55,12 @@ cat_one_file (GFile         *f,
 }
 
 gboolean
-ostree_builtin_cat (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_cat (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
   int i;
   const char *rev;
-  gs_unref_object OstreeRepo *repo = NULL;
   gs_unref_object GOutputStream *stdout_stream = NULL;
   gs_unref_object GFile *root = NULL;
   gs_unref_object GFile *f = NULL;
@@ -72,10 +71,6 @@ ostree_builtin_cat (int argc, char **argv, GFile *repo_path, GCancellable *cance
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   if (argc <= 2)
     {
       ot_util_usage_error (context, "An COMMIT and at least one PATH argument are required", error);
index 136df30437137f443f4111658b4f689baa5b1c96..2bf26e2578d17bbc150f921a4fe648c97a27fe03 100644 (file)
@@ -171,13 +171,12 @@ process_many_checkouts (OstreeRepo         *repo,
 }
 
 gboolean
-ostree_builtin_checkout (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_checkout (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
   const char *commit;
   const char *destination;
-  gs_unref_object OstreeRepo *repo = NULL;
   gs_free char *existing_commit = NULL;
   gs_free char *resolved_commit = NULL;
   gs_free char *tmp_destination = NULL;
@@ -192,10 +191,6 @@ ostree_builtin_checkout (int argc, char **argv, GFile *repo_path, GCancellable *
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   if (argc < 2)
     {
       gchar *help = g_option_context_get_help (context, TRUE, NULL);
index cb61932a9ce143c88dac3409c23c318011b987cb..c210c50e271a76bec3d597694a4d0673825178a2 100644 (file)
@@ -56,7 +56,7 @@ on_checksum_received (GObject    *obj,
 }
 
 gboolean
-ostree_builtin_checksum (int argc, char **argv, GFile *repo_path_path, GCancellable *cancellable, GError **error)
+ostree_builtin_checksum (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
index 6fffc39405e1f500da98611b09f51a7a0cf31650..7558ef473e1d301b21a952bce959020e780bb086 100644 (file)
@@ -135,7 +135,7 @@ commit_filter (OstreeRepo         *self,
 }
 
 gboolean
-ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_commit (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
@@ -146,7 +146,6 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GCancellable *ca
   guint content_total = 0;
   guint content_written = 0;
   guint64 content_bytes_written = 0;
-  gs_unref_object OstreeRepo *repo = NULL;
   gs_unref_object GFile *arg = NULL;
   gs_free char *parent = NULL;
   gs_free char *commit_checksum = NULL;
@@ -173,10 +172,6 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GCancellable *ca
         goto out;
     }
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   if (!opt_branch)
     {
       g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
index 17707eef9cc2565cd12773a7cf0ed751dfdd5d8e..56ddf86ee8a4e9564f744e22902cb782c0455baf 100644 (file)
@@ -52,14 +52,13 @@ split_key_string (const char   *k,
 }
 
 gboolean
-ostree_builtin_config (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_config (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   GOptionContext *context = NULL;
   gboolean ret = FALSE;
   const char *op;
   const char *section_key;
   const char *value;
-  gs_unref_object OstreeRepo *repo = NULL;
   gs_free char *section = NULL;
   gs_free char *key = NULL;
   GKeyFile *config = NULL;
@@ -70,10 +69,6 @@ ostree_builtin_config (int argc, char **argv, GFile *repo_path, GCancellable *ca
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   if (argc < 2)
     {
       ot_util_usage_error (context, "OPERATION must be specified", error);
index 7abe071fc5695a7a9a22d8de41c4c83712372156..7bd772caacd3c202055e8bda9142631515072220 100644 (file)
@@ -115,13 +115,12 @@ object_set_total_size (OstreeRepo    *repo,
 }
 
 gboolean
-ostree_builtin_diff (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_diff (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   gboolean ret = FALSE;
   GOptionContext *context;
   const char *src;
   const char *target;
-  gs_unref_object OstreeRepo *repo = NULL;
   gs_free char *src_prev = NULL;
   gs_unref_object GFile *srcf = NULL;
   gs_unref_object GFile *targetf = NULL;
@@ -135,10 +134,6 @@ ostree_builtin_diff (int argc, char **argv, GFile *repo_path, GCancellable *canc
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   if (argc < 2)
     {
       gchar *help = g_option_context_get_help (context, TRUE, NULL);
index f7c7b332027182e6a1f79bbc97bc035bd1877b45..77720da379bf4e6631fa1d467ca2c16558cc09e0 100644 (file)
@@ -234,14 +234,13 @@ fsck_reachable_objects_from_commits (OstreeRepo            *repo,
 }
 
 gboolean
-ostree_builtin_fsck (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_fsck (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   gboolean ret = FALSE;
   GOptionContext *context;
   GHashTableIter hash_iter;
   gpointer key, value;
   gboolean found_corruption = FALSE;
-  gs_unref_object OstreeRepo *repo = NULL;
   gs_unref_hashtable GHashTable *objects = NULL;
   gs_unref_hashtable GHashTable *commits = NULL;
 
@@ -251,10 +250,6 @@ ostree_builtin_fsck (int argc, char **argv, GFile *repo_path, GCancellable *canc
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   if (!opt_quiet)
     g_print ("Enumerating objects...\n");
 
index 01421aef0f7d22ca19bd1bea80d826c46733fd75..acfa9287c628018e7d8ba58c41052e8b3e1a1d26 100644 (file)
@@ -38,14 +38,14 @@ static GOptionEntry options[] = {
 
 
 gboolean
-ostree_builtin_init (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_init (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   GOptionContext *context = NULL;
   gboolean ret = FALSE;
   const char *mode_str = "bare";
+  GFile *repo_path = NULL;
   gs_unref_object GFile *child = NULL;
   gs_unref_object GFile *grandchild = NULL;
-  gs_unref_object OstreeRepo *repo = NULL;
   GString *config_data = NULL;
 
   context = g_option_context_new ("- Initialize a new empty repository");
@@ -54,6 +54,8 @@ ostree_builtin_init (int argc, char **argv, GFile *repo_path, GCancellable *canc
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
+  repo_path = ostree_repo_get_path (repo);
+
   child = g_file_get_child (repo_path, "config");
 
   config_data = g_string_new (DEFAULT_CONFIG_CONTENTS);
@@ -112,7 +114,6 @@ ostree_builtin_init (int argc, char **argv, GFile *repo_path, GCancellable *canc
   if (!g_file_make_directory (child, NULL, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
   if (!ostree_repo_check (repo, error))
     goto out;
 
index a79fcca9573f009d003395c444414b2fef83a500..0ab134c3fd7db0079592dc7cc2bab479b7672204 100644 (file)
@@ -62,14 +62,13 @@ out:
 gboolean
 ostree_builtin_log (int           argc,
                     char        **argv,
-                    GFile        *repo_path,
+                    OstreeRepo   *repo,
                     GCancellable *cancellable,
                     GError      **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
   const char *rev;
-  gs_unref_object OstreeRepo *repo = NULL;
   gs_free char *checksum = NULL;
   OstreeDumpFlags flags = OSTREE_DUMP_NONE;
 
@@ -79,10 +78,6 @@ ostree_builtin_log (int           argc,
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   if (opt_raw)
     flags |= OSTREE_DUMP_RAW;
 
index 6d8423ebcfc3f2e50de1bae17a5734b7b801127f..105edfb75866266036d08e0e383926eed692a4e5 100644 (file)
@@ -239,11 +239,10 @@ print_one_argument (OstreeRepo   *repo,
 }
 
 gboolean
-ostree_builtin_ls (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_ls (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
-  gs_unref_object OstreeRepo *repo = NULL;
   const char *rev;
   int i;
   gs_unref_object GFile *root = NULL;
@@ -256,10 +255,6 @@ ostree_builtin_ls (int argc, char **argv, GFile *repo_path, GCancellable *cancel
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   if (argc <= 1)
     {
       ot_util_usage_error (context, "An COMMIT argument is required", error);
index 6e2f07490afae651ef7f2c75c60f456fcf702883..c61e41e50dc29569a61b9c3060a0b99e2f1b86b2 100644 (file)
@@ -38,11 +38,10 @@ static GOptionEntry options[] = {
 };
 
 gboolean
-ostree_builtin_prune (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_prune (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   gboolean ret = FALSE;
   GOptionContext *context;
-  gs_unref_object OstreeRepo *repo = NULL;
   gs_free char *formatted_freed_size = NULL;
   OstreeRepoPruneFlags pruneflags = 0;
   gint n_objects_total;
@@ -55,10 +54,6 @@ ostree_builtin_prune (int argc, char **argv, GFile *repo_path, GCancellable *can
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   if (opt_refs_only)
     pruneflags |= OSTREE_REPO_PRUNE_FLAGS_REFS_ONLY;
   if (opt_no_prune)
index 23319cf6b2ac6e894e9be1fc0561987c1fed5c24..a2e6755ac2d8bba49f367a4153169232d927ca18 100644 (file)
@@ -154,7 +154,7 @@ idle_print_status (gpointer user_data)
 }
 
 gboolean
-ostree_builtin_pull_local (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_pull_local (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   gboolean ret = FALSE;
   GOptionContext *context;
@@ -182,9 +182,7 @@ ostree_builtin_pull_local (int argc, char **argv, GFile *repo_path, GCancellable
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  data->dest_repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (data->dest_repo, error))
-    goto out;
+  data->dest_repo = g_object_ref (repo);
 
   if (argc < 2)
     {
index 797778dd11f9b552b106b3a1286617d1729790bb..630301ec7c4f7bc45ff7721a457a8e9793ebd998 100644 (file)
@@ -31,13 +31,12 @@ static GOptionEntry options[] = {
 };
 
 gboolean
-ostree_builtin_pull (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_pull (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
   const char *remote;
   OstreeRepoPullFlags pullflags = 0;
-  gs_unref_object OstreeRepo *repo = NULL;
   gs_unref_ptrarray GPtrArray *refs_to_fetch = NULL;
 
   context = g_option_context_new ("REMOTE [BRANCH...] - Download data from remote repository");
@@ -46,10 +45,6 @@ ostree_builtin_pull (int argc, char **argv, GFile *repo_path, GCancellable *canc
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   if (argc < 2)
     {
       ot_util_usage_error (context, "REMOTE must be specified", error);
index 972afe38d00774e20deed44213a67b7543069164..99a9333507a7a68df97cff3ffca0587c3de4a707 100644 (file)
@@ -34,12 +34,11 @@ static GOptionEntry options[] = {
 };
 
 gboolean
-ostree_builtin_refs (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_refs (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   gboolean ret = FALSE;
   GOptionContext *context;
   const char *refspec_prefix = NULL;
-  gs_unref_object OstreeRepo *repo = NULL;
   gs_unref_hashtable GHashTable *refs = NULL;
   GHashTableIter hashiter;
   gpointer hashkey, hashvalue;
@@ -50,10 +49,6 @@ ostree_builtin_refs (int argc, char **argv, GFile *repo_path, GCancellable *canc
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   if (argc >= 2)
     refspec_prefix = argv[1];
 
index 76a63a3dfa31afce1040c0f60421369891737a06..98a8b4b30a176757e30996eaef10b1223f9cf7e9 100644 (file)
@@ -41,13 +41,12 @@ usage_error (GOptionContext *context, const char *message, GError **error)
 }
 
 gboolean
-ostree_builtin_remote (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_remote (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
   const char *op;
   guint i;
-  gs_unref_object OstreeRepo *repo = NULL;
   gs_unref_ptrarray GPtrArray *branches = NULL;
   GKeyFile *config = NULL;
 
@@ -57,10 +56,6 @@ ostree_builtin_remote (int argc, char **argv, GFile *repo_path, GCancellable *ca
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   if (argc < 2)
     {
       usage_error (context, "OPERATION must be specified", error);
index 44e0450c2d47f66bb805d0fafc1257be3d155771..b307f35743242d90ce6ac2a2c5ec17d1db89dc99 100644 (file)
@@ -83,7 +83,7 @@ out:
 gboolean
 ostree_builtin_reset (int           argc,
                       char        **argv,
-                      GFile        *repo_path,
+                      OstreeRepo   *repo,
                       GCancellable *cancellable,
                       GError      **error)
 {
@@ -91,7 +91,6 @@ ostree_builtin_reset (int           argc,
   gboolean ret = FALSE;
   const char *ref;
   const char *target = NULL;
-  gs_unref_object OstreeRepo *repo = NULL;
   gs_free gchar *current = NULL;
   gs_free gchar *checksum = NULL;
 
@@ -101,10 +100,6 @@ ostree_builtin_reset (int           argc,
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   if (argc <= 2)
     {
       ot_util_usage_error (context, "A ref and commit argument is required", error);
index a1349a68360e0178d5200fb9d7de545fe01839ea..ffd5c78b9c2427b20e1ffd35bd3247eac463360a 100644 (file)
@@ -31,13 +31,12 @@ static GOptionEntry options[] = {
 };
 
 gboolean
-ostree_builtin_rev_parse (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_rev_parse (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
   const char *rev = "master";
   int i;
-  gs_unref_object OstreeRepo *repo = NULL;
   gs_free char *resolved_rev = NULL;
   gs_unref_variant GVariant *variant = NULL;
   gs_free char *formatted_variant = NULL;
@@ -48,10 +47,6 @@ ostree_builtin_rev_parse (int argc, char **argv, GFile *repo_path, GCancellable
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   if (argc < 2)
     {
       ot_util_usage_error (context, "REV must be specified", error);
index 91d2b438d1fe0265c34ba382563ed082d9b16975..b7f2138e6acfe5fd3cb8ce3055eba0a8c4806cdc 100644 (file)
@@ -178,12 +178,11 @@ print_if_found (OstreeRepo        *repo,
 }
 
 gboolean
-ostree_builtin_show (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_show (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
   const char *rev;
-  gs_unref_object OstreeRepo *repo = NULL;
   gs_free char *resolved_rev = NULL;
 
   context = g_option_context_new ("OBJECT - Output a metadata object");
@@ -192,10 +191,6 @@ ostree_builtin_show (int argc, char **argv, GFile *repo_path, GCancellable *canc
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   if (argc <= 1)
     {
       ot_util_usage_error (context, "An object argument is required", error);
index 9607f4dbddf8db89f8bb89dbe17108395ab42ff0..60e2ac867320afe91ef7cbbfaf7012f5e5b4d8c7 100644 (file)
@@ -279,7 +279,7 @@ on_dir_changed (GFileMonitor  *mon,
 }
 
 gboolean
-ostree_builtin_trivial_httpd (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_trivial_httpd (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   gboolean ret = FALSE;
   GOptionContext *context;
index b744d4250775d763792271acd3a8576570b5e2b9..48b3da70865ee9416ea0265dc3993d5621272ad6 100644 (file)
@@ -34,13 +34,12 @@ static GOptionEntry options[] = {
 };
 
 gboolean
-ostree_builtin_write_refs (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+ostree_builtin_write_refs (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 {
   GOptionContext *context;
   gboolean ret = FALSE;
   GError *temp_error = NULL;
   gsize len;
-  gs_unref_object OstreeRepo *repo = NULL;
   gs_unref_object GInputStream *instream = NULL;
   gs_unref_object GDataInputStream *datastream = NULL;
   gs_free char *line = NULL;
@@ -51,10 +50,6 @@ ostree_builtin_write_refs (int argc, char **argv, GFile *repo_path, GCancellable
   if (!g_option_context_parse (context, &argc, &argv, error))
     goto out;
 
-  repo = ostree_repo_new (repo_path);
-  if (!ostree_repo_check (repo, error))
-    goto out;
-
   instream = (GInputStream*)g_unix_input_stream_new (0, FALSE);
   datastream = g_data_input_stream_new (instream);
 
index 2231150e0014fbf38473f648657dea240dfb56c6..cbd78471e4ddc2003a9032fbab273cf9d3d3c6c6 100644 (file)
 
 #pragma once
 
-#include <gio/gio.h>
+#include "ostree.h"
 
 G_BEGIN_DECLS
 
-#define BUILTINPROTO(name) gboolean ostree_builtin_ ## name (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error)
+#define BUILTINPROTO(name) gboolean ostree_builtin_ ## name (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error)
 
 BUILTINPROTO(admin);
 BUILTINPROTO(cat);
index 6f751c7143250f11f613078616b4e79533bb03f1..9e1b4fa2e8ba87a1ab672d43a72987a6fc73e6a1 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <string.h>
 
+#include "ostree.h"
 #include "ot-main.h"
 #include "otutil.h"
 #include "libgsystem.h"
@@ -77,10 +78,9 @@ ostree_run (int    argc,
   OstreeCommand *command;
   GError *error = NULL;
   GCancellable *cancellable = NULL;
+  gs_unref_object OstreeRepo *repo = NULL;
   const char *cmd = NULL;
-  const char *repo = NULL;
-  const char *host_repo_path = "/ostree/repo";
-  GFile *repo_file = NULL;
+  const char *repo_arg = NULL;
   gboolean want_help = FALSE;
   gboolean skip;
   int in, out, i;
@@ -128,13 +128,13 @@ ostree_run (int    argc,
             }
           else if (g_str_equal (argv[in], "--repo") && in + 1 < argc)
             {
-              repo = argv[in + 1];
+              repo_arg = argv[in + 1];
               skip = TRUE;
               in++;
             }
           else if (g_str_has_prefix (argv[in], "--repo="))
             {
-              repo = argv[in] + 7;
+              repo_arg = argv[in] + 7;
               skip = TRUE;
             }
           else if (g_str_equal (argv[in], "--verbose"))
@@ -219,38 +219,42 @@ ostree_run (int    argc,
 
   g_set_prgname (g_strdup_printf ("ostree %s", cmd));
 
-  if (repo == NULL && !want_help &&
+  if (repo_arg == NULL && !want_help &&
       !(command->flags & OSTREE_BUILTIN_FLAG_NO_REPO))
     {
-      if (g_file_test ("objects", G_FILE_TEST_IS_DIR)
-          && g_file_test ("config", G_FILE_TEST_IS_REGULAR))
+      GError *temp_error = NULL;
+      repo = ostree_repo_new_default ();
+      if (!ostree_repo_check (repo, &temp_error))
         {
-          g_debug ("Assuming repo is in current directory");
-          repo = ".";
-        }
-      else if (g_file_test (host_repo_path, G_FILE_TEST_EXISTS))
-        {
-          g_debug ("Assuming repo is at: %s", host_repo_path);
-          repo = host_repo_path;
+          if (g_error_matches (temp_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+            {
+              g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                                   "Command requires a --repo argument");
+              g_error_free (temp_error);
+              ostree_usage (argv, commands, TRUE);
+            }
+          else
+            {
+              g_propagate_error (&error, temp_error);
+            }
+          goto out;
         }
-      else
+    }
+  else if (repo_arg)
+    {
+      gs_unref_object GFile *repo_file = g_file_new_for_path (repo_arg);
+      repo = ostree_repo_new (repo_file);
+      if (!(command->flags & OSTREE_BUILTIN_FLAG_NO_CHECK))
         {
-          g_debug ("Could not automatically determine --repo");
-          g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
-                               "Command requires a --repo argument");
-          ostree_usage (argv, commands, TRUE);
-          goto out;
+          if (!ostree_repo_check (repo, &error))
+            goto out;
         }
     }
-
-  if (repo)
-    repo_file = g_file_new_for_path (repo);
   
-  if (!command->fn (argc, argv, repo_file, cancellable, &error))
+  if (!command->fn (argc, argv, repo, cancellable, &error))
     goto out;
 
  out:
-  g_clear_object (&repo_file);
   if (error)
     {
       g_propagate_error (res_error, error);
index 41adee40659178922eeb1d15520339308c8698ab..f13718666f665f1c239365d69c98deb7dd2c4c9b 100644 (file)
 
 #pragma once
 
-#include <gio/gio.h>
+#include "ostree.h"
 
 typedef enum {
   OSTREE_BUILTIN_FLAG_NONE = 0,
-  OSTREE_BUILTIN_FLAG_NO_REPO = 1,
+  OSTREE_BUILTIN_FLAG_NO_REPO = 1 << 0,
+  OSTREE_BUILTIN_FLAG_NO_CHECK = 1 << 1
 } OstreeBuiltinFlags;
 
 typedef struct {
   const char *name;
-  gboolean (*fn) (int argc, char **argv, GFile *repo_path, GCancellable *cancellable, GError **error);
+  gboolean (*fn) (int argc, char **argv, OstreeRepo *repo, GCancellable *cancellable, GError **error);
   int flags; /* OstreeBuiltinFlags */
 } OstreeCommand;